route.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { NextResponse } from "next/server";
  2. import { verifyToken } from "@/lib/auth";
  3. import smbClient from "@/lib/smbClient";
  4. export async function GET(request, { params }) {
  5. const headers = new Headers();
  6. headers.set("Cache-Control", "no-store");
  7. const decoded = verifyToken(request);
  8. if (decoded.error) {
  9. return NextResponse.json(
  10. { error: decoded.error },
  11. { status: 401, headers }
  12. );
  13. }
  14. if (decoded.role !== "admin") {
  15. console.log(`Unauthorized access attempt by non-admin user: ${decoded.username}`);
  16. return NextResponse.json(
  17. { error: "Unauthorized access. Admin only." },
  18. { status: 403, headers }
  19. );
  20. }
  21. const { path: pathArray = [] } = params;
  22. const smbPath = pathArray.join("\\");
  23. console.log("Versuche, auf folgenden Admin-Pfad zuzugreifen:", smbPath);
  24. return new Promise((resolve) => {
  25. smbClient.readdir(smbPath, (err, files) => {
  26. if (err) {
  27. console.error("Fehler beim Zugriff auf den Admin-Ordner:", err);
  28. resolve(
  29. NextResponse.json(
  30. {
  31. error: "Fehler beim Zugriff auf den Ordner",
  32. details: err.message,
  33. },
  34. { status: 500, headers }
  35. )
  36. );
  37. } else if (!files || files.length === 0) {
  38. console.log(`Keine Dateien im Pfad ${smbPath} gefunden.`);
  39. resolve(
  40. NextResponse.json(
  41. { message: "Keine Dateien im angegebenen Ordner gefunden." },
  42. { status: 200, headers }
  43. )
  44. );
  45. } else {
  46. const sortedFiles = [...files].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
  47. resolve(NextResponse.json({ files: sortedFiles }, { status: 200, headers }));
  48. }
  49. });
  50. });
  51. }